// 导入模块（路径、文件）
import Path from "path";
import fs from "fs";

// 创建函数（用来扫描 controllers 目录的 js 文件）
function scanController(conDir) {
    // 获取根目录路径（拼上文件夹名称）
    const path = Path.join(Path.resolve("./"), conDir);

    // 如果路径存在就继续扫描当前路径的js文件
    if (fs.existsSync(path)) {
        // 获取目录文件（js）
        const files = fs.readdirSync(path).filter((file) => file.endsWith("js"));

        // 拼接完整路径
        const fullPath = files.map((file) => {
            return `file:///${Path.join(path, file)}`;
        });

        // 返回 js 文件路径
        return fullPath;
    }
    // 路径不存在返回 null
    return null;
}

// 创建函数（注册对应的请求路径和处理路由）
function registryRouter(router, controllersfullPath) {

    // 遍历控制文件
    controllersfullPath.forEach(async (controller) => {
        // 导入控制文件
        const controllerObj = (await import(controller)).obj;

        // 遍历配置路由（路径、方法、异步函数）
        for (const key in controllerObj) {
            // 获取 请求方法，请求路径
            const [requestMethod, requestPath] = key.split(" ");
            // 获取 请求函数
            const requestFn = controllerObj[key];

            // 验证请求方式
            if (requestMethod.endsWith("get")) {
                // 处理 get 请求路由
                router.get(requestPath, requestFn);
            } else if (requestMethod.endsWith("post")) {
                // 处理 post 请求路由
                router.post(requestPath, requestFn);
            } else if (requestMethod.endsWith("put")) {
                // 处理 put 请求路由
                router.put(requestPath, requestFn);
            } else if (requestMethod.endsWith("delete")) {
                // 处理 delete 请求路由
                router.delete(requestPath, requestFn);
            } else {
                // 请求方式不正确
                console.log(`${requestMethod}：请求方式不正确`);
            }
        }
    });

}

// 暴露函数（扫描控制器、处理路由）
export const scanControllers = scanController;
export const registryRouters = registryRouter;